A web page is made up of a number of objects. These objects can include the HTML of the page, the images, the CSS that defines the layout, and also any client-side scripting code (e.g., Javascript, VBScript). Each of the non-HTML objects is loaded after the initial HTML of the page is loaded. In other words, the web browser initially fetches the HTML, then it requests all the other objects that are included in the HTML.
This creates a number of challenges. One is that each request for an object typically requires a separate TCP connection to be setup and then torn down when the transaction is complete, which is time consuming. Another challenge is that an object included in the page (e.g., a client-side scripting code or other object with an external source) can effectively block the rendering of the page while it is executed. Since client-side scripts can alter the way the page is drawn, the client (e.g., web browser) defers rendering the page until after the script has loaded and executed before the basic HTML is rendered. The result is that pages load more slowly. For example, a page may partially load and then stall while waiting for a non-HTML object to render. This problem can be amplified when the page includes multiple objects hosted on multiple domains, which typically requires multiple TCP connections be established in order to access those objects.